這邊一樣以 AtCoder Educational DP Contest 的類題來舉例,這題是 B - Frog 2,簡單來說一隻青蛙可以一次走  ~ 
 步,然後每一步的價值就是前面和這一步的高度差,然後要找從第一步到最後一步花費的最低價值
可以發現這一題跟昨天相比又有一點不同,他最多可以一次走  步,不過仔細一看發現 
,所以就算你直接枚舉找出走到每一步的最小成本也只會是 
 而已,而這邊的 
 是 
,所以乘起來就是 
,完全是可以的範圍
#include <bits/stdc++.h>
using namespace std;
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    long long n,k;
    cin >> n >> k;
    vector<long long> stone(n),dp(n,INT_MAX);
    for(int i = 0;i < n;i++){
        cin >> stone[i];
    }
    dp[0] = 0;
    for(int i = 1;i < n;i++){
        for(int j = 1;j <= k;j++){
            if(i - j >= 0){
                dp[i] = min(dp[i - j] + abs(stone[i] - stone[i - j]),dp[i]);
            }
        }
    }
    cout << dp[n - 1] << "\n";
    return 0;
}
前面有提到會需要枚舉走  步的情況,所以是 
由此可知其實 DP 一種經典題就可以改成好幾種形式與延伸,所以要在賽中解出 DP 題只能平常多多練習,或是你有很強的思考能力才有辦法
看起來應該到完賽日都寫不完,不過我認為 AtCoder Educational DP Contest 是很好的題組,包含許多 DP 經典題,可以一題一題練習,我相信這樣的日常練習在賽中會有很大的幫助